import re

# TODO：清理代码，提取常用模式为常量，如中文字符等

class 格式问题:
    def __init__(self, 类型, 错误内容):
        self.类型 = 类型
        self.错误内容 = 错误内容

    def __str__(self):
        return f"【{self.类型}】：{self.错误内容}"


中文字符 = r'[\u4e00-\u9fa5]'


def 链接前后需增加空格(文件内容):
    链接模式 = r'\[.+\]\(.+\)'
    前无空格 = re.findall(r'\w' + 链接模式, 文件内容)
    问题 = list(map(lambda 错误字段: 格式问题("链接前无空格", 错误字段), 前无空格))
    后无空格 = re.findall(链接模式 + r'\w', 文件内容)
    问题 += list(map(lambda 错误字段: 格式问题("链接后无空格", 错误字段), 后无空格))
    return 问题


def 数字前后需增加空格(文件内容):
    前无空格 = re.findall(中文字符 + r'\d+', 文件内容)
    问题 = list(map(lambda 错误字段: 格式问题("数字前无空格", 错误字段), 前无空格))
    后无空格 = re.findall(r'\d+' + 中文字符, 文件内容)
    问题 += list(map(lambda 错误字段: 格式问题("数字后无空格", 错误字段), 后无空格))
    return 问题


def 中英文间需增加空格(文件内容):
    英文字符 = r'[a-zA-Z]+'
    前无空格 = re.findall(中文字符 + 英文字符, 文件内容)
    问题 = list(map(lambda 错误字段: 格式问题("英文前无空格", 错误字段), 前无空格))
    后无空格 = re.findall(英文字符 + 中文字符, 文件内容)
    问题 += list(map(lambda 错误字段: 格式问题("英文后无空格", 错误字段), 后无空格))
    return 问题


def 按规范检查(文件内容):
    问题 = 链接前后需增加空格(文件内容)
    问题 += 数字前后需增加空格(文件内容)
    问题 += 中英文间需增加空格(文件内容)
    return 问题


def 按规范修订(文件内容):
    数字前加空格 = re.sub(r"([\u4e00-\u9fa5])(\d+)", r"\1 \2", 文件内容)
    数字后加空格 = re.sub(r"(\d+)([\u4e00-\u9fa5])", r"\1 \2", 数字前加空格)

    英文前加空格 = re.sub(r"([\u4e00-\u9fa5])([a-zA-Z]+)", r"\1 \2", 数字后加空格)
    英文后加空格 = re.sub(r"([a-zA-Z]+)([\u4e00-\u9fa5])", r"\1 \2", 英文前加空格)
    return 英文后加空格
